package 操作系统实验.实验一;/**
 * ************************************************************************
 * 项目名称: projectweb <br>
 * 文件名称:  <br>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br>
 * 文件创建：1913040634刘世锦  <br>
 * 创建时间: 2021/4/1 <br>
 *
 * @version v1.0 <br>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br>
 * ************************************************************************
 */

/**
 * @ProjectName: projectweb
 * @ClassName: laos
 * @Description: 请描述该类的功能
 * @Author: 1913040634刘世锦
 * @Date: 2021/4/1 17:16 .
 * @version v1.0
 */
class Q
{
    String name;
    int num=0;
    int size=10;
}
class Produce implements Runnable
{
    Q q;
    Produce(Q q)
    {
        this.q = q;
        this.q.name="Produce";
    }
    public void run()
    {
        while(true)
        {
            synchronized(q)
            {
                if(q.num<q.size)
                {
                    q.num++;
                    System.out.println("Produce已生产第："+q.num+"个产品!");
                    try {
                        Thread.currentThread().sleep(150);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    q.notify();
                }
                else
                {
                    try {
                        System.out.println("产品已满！！");
                        q.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
  class Consume implements Runnable
{
    Q q;
    Consume(Q q)
    {
        this.q = q;
        this.q.name="consume";
    }
    public void run()
    {
        while(true)
        {
            synchronized(q)
            {
                if(q.num>0)
                {
                    System.out.println("consume要消费第："+q.num+"个产品!");
                    q.num--;
                    try {
                        Thread.currentThread().sleep(150);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    q.notifyAll();
                }
                else
                {
                    try {
                        System.out.println("产品已售罄！");
                        q.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
public class 进程同步
{
    public static void main(String[] args)
    {
        Q q = new Q();
        new Thread(new Produce(q)).start();
        new Thread(new Consume(q)).start();



    }
}

